home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 125 / Computer Shopper CD-ROM Issue 125 (1998-07)(Dennis Publishing).iso / Business / Dazzler / DAZZLER.Z / CEditControl.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-26  |  8.7 KB  |  636 lines

  1. import java.awt.Color;
  2. import java.awt.Event;
  3. import java.awt.Font;
  4. import java.awt.FontMetrics;
  5. import java.awt.Graphics;
  6. import java.awt.Point;
  7. import java.awt.Toolkit;
  8. import java.util.NoSuchElementException;
  9.  
  10. class CEditControl {
  11.    public static final int INDENT = 5;
  12.    private CKeyboard m_keyPrevious = new CKeyboard();
  13.    private CKeyboard m_keyNext = new CKeyboard();
  14.    private String m_strData = "";
  15.    private String m_strMask = "";
  16.    private Color m_rgbText = new Color(0, 0, 0);
  17.    private Color m_rgbBackground = new Color(255, 255, 255);
  18.    private CRect m_rcDraw = new CRect();
  19.    private Font m_Font = new Font("Helvetica", 0, 20);
  20.    private char m_chPrompt = 0;
  21.    private int m_nLimit = 0;
  22.    private int m_nFlags;
  23.    private int m_nSelStart;
  24.    private int m_nCurrPos;
  25.    private CRect m_rcSelection;
  26.    private CRect m_rcInsertPt;
  27.    private Point m_ptText;
  28.    private boolean m_bHasFocus;
  29.    private boolean m_bSelecting;
  30.  
  31.    public boolean ProcessMouseMove(Point var1) {
  32.       this.m_nCurrPos = this.PlaceCursor(var1);
  33.       this.DrawControl();
  34.       return false;
  35.    }
  36.  
  37.    public void GetFocus() {
  38.       CIconObjectList var1 = Globals.CUR_COURSE.m_pCurrentTask.GetResponseManager().m_listIcons;
  39.       CIconObject var2 = null;
  40.       boolean var3 = false;
  41.  
  42.       try {
  43.          var2 = var1.GetHead();
  44.       } catch (NoSuchElementException var5) {
  45.          var3 = true;
  46.       }
  47.  
  48.       while(!var3) {
  49.          if (var2 != null && var2.m_nTypeID == 24 && var2.HasFocus()) {
  50.             var2.ReleaseFocus();
  51.             var2.DrawObject((Graphics)null, 0, (CRect)null);
  52.          }
  53.  
  54.          try {
  55.             var2 = var1.GetNext();
  56.          } catch (NoSuchElementException var4) {
  57.             var3 = true;
  58.          }
  59.       }
  60.  
  61.       this.m_bHasFocus = true;
  62.       if ((this.m_nFlags & 128) != 0) {
  63.          this.AutoSelect();
  64.       }
  65.  
  66.       this.DrawControl();
  67.    }
  68.  
  69.    public void DrawControl() {
  70.       this.DrawControl(Globals.thePresView.GetDC(), this.m_rcDraw);
  71.    }
  72.  
  73.    public void DrawControl(Graphics var1, CRect var2) {
  74.       if (var1 == null) {
  75.          var1 = Globals.thePresView.GetDC();
  76.       }
  77.  
  78.       if (var2 == null) {
  79.          var2 = this.m_rcDraw;
  80.       }
  81.  
  82.       if (var1 != null && var2 != null) {
  83.          Graphics var3 = var1.create();
  84.          String var4 = "";
  85.          var3.setColor(this.m_rgbBackground);
  86.          var3.fillRect(var2.x, var2.y, var2.width - 1, var2.height - 1);
  87.          if ((this.m_nFlags & 16) != 0) {
  88.             var3.setColor(Color.black);
  89.             var3.drawRect(var2.x, var2.y, var2.width - 1, var2.height - 1);
  90.          }
  91.  
  92.          var3.setColor(this.m_rgbText);
  93.          var3.setFont(this.m_Font);
  94.          var4 = this.FormatData();
  95.          var3.clipRect(this.m_rcDraw.x + 5, this.m_rcDraw.y, this.m_rcDraw.width - 6, this.m_rcDraw.height);
  96.          var3.drawString(var4, this.m_ptText.x, this.m_ptText.y);
  97.          if (this.m_bHasFocus) {
  98.             var3.setXORMode(Color.white);
  99.             var3.setColor(Color.black);
  100.             if (this.m_nSelStart != this.m_nCurrPos) {
  101.                this.SetSelection();
  102.                var3.fillRect(this.m_rcSelection.x, this.m_rcSelection.y, this.m_rcSelection.width, this.m_rcSelection.height);
  103.                return;
  104.             }
  105.  
  106.             var3.fillRect(this.m_rcInsertPt.x, this.m_rcInsertPt.y, this.m_rcInsertPt.width, this.m_rcInsertPt.height);
  107.          }
  108.       }
  109.  
  110.    }
  111.  
  112.    public void SetMask(String var1) {
  113.       this.m_strMask = var1;
  114.    }
  115.  
  116.    private String ParseMask() {
  117.       String var1 = "";
  118.       String var2 = "";
  119.       char var3 = '\u0000';
  120.       int var4 = 0;
  121.  
  122.       for(int var6 = 0; var6 < this.m_strMask.length(); ++var6) {
  123.          var3 = this.m_strMask.charAt(var6);
  124.          int var5 = var1.length();
  125.          if (!this.IsMaskChar(var3)) {
  126.             var1 = var1 + var3;
  127.          } else {
  128.             while(var5 == var1.length()) {
  129.                if (var4 < this.m_strData.length()) {
  130.                   if (var3 == '9' && Character.isDigit(this.m_strData.charAt(var4)) || (var3 == 'A' || var3 == 'L' || var3 == 'U') && Character.isLetter(this.m_strData.charAt(var4)) || var3 == 'N' && Character.isLetterOrDigit(this.m_strData.charAt(var4)) || var3 == 'X') {
  131.                      var1 = var1 + this.m_strData.charAt(var4);
  132.                      if (var3 == 'L') {
  133.                         var2 = var2 + Character.toLowerCase(this.m_strData.charAt(var4));
  134.                      } else if (var3 == 'U') {
  135.                         var2 = var2 + Character.toUpperCase(this.m_strData.charAt(var4));
  136.                      } else {
  137.                         var2 = var2 + this.m_strData.charAt(var4);
  138.                      }
  139.                   }
  140.  
  141.                   ++var4;
  142.                } else {
  143.                   var1 = var1 + this.m_chPrompt;
  144.                }
  145.             }
  146.          }
  147.       }
  148.  
  149.       this.m_strData = var2;
  150.       return var1;
  151.    }
  152.  
  153.    private void FindNext() {
  154.       CIconObjectList var1 = Globals.CUR_COURSE.m_pCurrentTask.GetResponseManager().m_listIcons;
  155.       CIconObject var2 = null;
  156.       CIconObject var3 = null;
  157.       boolean var4 = false;
  158.       boolean var5 = false;
  159.  
  160.       try {
  161.          var2 = var1.GetHead();
  162.       } catch (NoSuchElementException var7) {
  163.          var4 = true;
  164.       }
  165.  
  166.       while(!var4) {
  167.          if (var2 != null && var2.m_nTypeID == 24) {
  168.             if (var3 == null) {
  169.                var3 = var2;
  170.             } else if (var5) {
  171.                var3 = var2;
  172.                break;
  173.             }
  174.  
  175.             if (var2.HasFocus()) {
  176.                var5 = true;
  177.             }
  178.          }
  179.  
  180.          try {
  181.             var2 = var1.GetNext();
  182.          } catch (NoSuchElementException var6) {
  183.             var4 = true;
  184.          }
  185.       }
  186.  
  187.       if (var3 != null && var5) {
  188.          var3.GetFocus();
  189.       }
  190.  
  191.    }
  192.  
  193.    public boolean HasFocus() {
  194.       return this.m_bHasFocus;
  195.    }
  196.  
  197.    public void AutoSelect() {
  198.       this.m_nSelStart = 0;
  199.       this.m_nCurrPos = this.GetOutputString().length();
  200.       this.PlaceCursor(this.m_nCurrPos);
  201.    }
  202.  
  203.    private String FormatData() {
  204.       String var1 = "";
  205.       if ((this.m_nFlags & 1024) != 0) {
  206.          this.m_strData = this.m_strData.toUpperCase();
  207.       } else if ((this.m_nFlags & 2048) != 0) {
  208.          this.m_strData = this.m_strData.toLowerCase();
  209.       }
  210.  
  211.       if (this.m_strMask.length() > 0) {
  212.          var1 = this.ParseMask();
  213.       } else {
  214.          var1 = this.m_strData;
  215.       }
  216.  
  217.       if ((this.m_nFlags & 512) != 0) {
  218.          int var2 = var1.length();
  219.          var1 = "";
  220.  
  221.          for(int var3 = 0; var3 < var2; ++var3) {
  222.             var1 = var1 + "*";
  223.          }
  224.       }
  225.  
  226.       return var1;
  227.    }
  228.  
  229.    private void FindPrev() {
  230.       CIconObjectList var1 = Globals.CUR_COURSE.m_pCurrentTask.GetResponseManager().m_listIcons;
  231.       CIconObject var2 = null;
  232.       CIconObject var3 = null;
  233.       boolean var4 = false;
  234.       boolean var5 = false;
  235.  
  236.       try {
  237.          var2 = var1.GetHead();
  238.       } catch (NoSuchElementException var7) {
  239.          var4 = true;
  240.       }
  241.  
  242.       while(!var4) {
  243.          if (var2 != null && var2.m_nTypeID == 24) {
  244.             if (var2.HasFocus() && !var5) {
  245.                if (var3 != null) {
  246.                   break;
  247.                }
  248.  
  249.                var3 = var2;
  250.                var5 = true;
  251.             } else {
  252.                var3 = var2;
  253.             }
  254.          }
  255.  
  256.          try {
  257.             var2 = var1.GetNext();
  258.          } catch (NoSuchElementException var6) {
  259.             var4 = true;
  260.          }
  261.       }
  262.  
  263.       if (var3 != null) {
  264.          var3.GetFocus();
  265.       }
  266.  
  267.    }
  268.  
  269.    private int PlaceCursor(Point var1) {
  270.       int var2 = 0;
  271.       int var3 = 0;
  272.       int var4 = this.m_rcDraw.x + 5;
  273.       FontMetrics var5 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
  274.       String var6 = this.FormatData();
  275.  
  276.       for(int var7 = 0; var7 < var6.length(); ++var7) {
  277.          var2 = var5.charWidth(var6.charAt(var7));
  278.          if (var1.x < var4 + var2 / 2) {
  279.             var3 = var7;
  280.             break;
  281.          }
  282.  
  283.          if (var7 == var6.length() - 1) {
  284.             var3 = var6.length();
  285.          }
  286.  
  287.          var4 += var2;
  288.       }
  289.  
  290.       this.m_rcInsertPt.x = var4;
  291.       return var3;
  292.    }
  293.  
  294.    private void PlaceCursor(int var1) {
  295.       FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
  296.       String var3 = this.FormatData();
  297.       this.m_rcInsertPt.x = this.m_rcDraw.x + 5 + var2.stringWidth(var3.substring(0, var1));
  298.    }
  299.  
  300.    public void SetPromptChar(char var1) {
  301.       this.m_chPrompt = var1;
  302.    }
  303.  
  304.    private boolean IsMaskChar(char var1) {
  305.       return var1 == '9' || var1 == 'A' || var1 == 'N' || var1 == 'L' || var1 == 'U' || var1 == 'X';
  306.    }
  307.  
  308.    public void SetFont(Font var1) {
  309.       this.m_Font = var1;
  310.       if (this.m_rcDraw != null) {
  311.          FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
  312.          this.m_rcInsertPt.reshape(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - var2.getHeight()) / 2, 2, var2.getHeight());
  313.          this.m_ptText.move(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - (var2.getAscent() + var2.getDescent())) / 2 + var2.getAscent());
  314.       }
  315.  
  316.    }
  317.  
  318.    public void SetColours(Color var1, Color var2) {
  319.       this.m_rgbText = var1;
  320.       this.m_rgbBackground = var2;
  321.    }
  322.  
  323.    private String GetOutputString() {
  324.       return this.m_strMask.length() > 0 ? this.m_strMask : this.m_strData;
  325.    }
  326.  
  327.    public void LimitText(int var1) {
  328.       this.m_nLimit = var1;
  329.    }
  330.  
  331.    public void ReleaseFocus() {
  332.       this.m_bHasFocus = false;
  333.    }
  334.  
  335.    public boolean ProcessDblClk(Point var1) {
  336.       this.m_nCurrPos = this.PlaceCursor(var1);
  337.       this.m_nSelStart = this.SearchLeft(this.m_nCurrPos);
  338.       this.m_nCurrPos = this.SearchRight(this.m_nSelStart);
  339.       this.PlaceCursor(this.m_nCurrPos);
  340.       this.DrawControl();
  341.       return false;
  342.    }
  343.  
  344.    public void SetRect(CRect var1) {
  345.       FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
  346.       this.m_rcDraw.reshape(var1);
  347.       this.m_rcInsertPt.reshape(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - var2.getHeight()) / 2, 2, var2.getHeight());
  348.       this.m_ptText.move(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - (var2.getAscent() + var2.getDescent())) / 2 + var2.getAscent());
  349.    }
  350.  
  351.    public String GetData() {
  352.       return this.m_strData;
  353.    }
  354.  
  355.    private int SearchRight(int var1) {
  356.       String var2 = this.GetOutputString();
  357.       int var3 = var2.length();
  358.       if (var1 >= 0 && var1 < var3) {
  359.          while(var1 < var3 && var2.charAt(var1) == ' ') {
  360.             ++var1;
  361.          }
  362.  
  363.          var1 = var2.indexOf(32, var1);
  364.          if (var1 == -1) {
  365.             var1 = var3;
  366.          } else {
  367.             do {
  368.                ++var1;
  369.             } while(var1 < var3 && var2.charAt(var1) == ' ');
  370.          }
  371.       }
  372.  
  373.       return var1;
  374.    }
  375.  
  376.    public boolean IsSelecting() {
  377.       return this.m_bSelecting;
  378.    }
  379.  
  380.    public boolean ProcessMouseUp(Point var1) {
  381.       this.m_bSelecting = false;
  382.       return false;
  383.    }
  384.  
  385.    private int SearchLeft(int param1) {
  386.       // $FF: Couldn't be decompiled
  387.    }
  388.  
  389.    private int MaskPosToDataPos(int var1) {
  390.       int var2 = 0;
  391.  
  392.       for(int var3 = 0; var3 < var1 && var3 < this.m_strMask.length(); ++var3) {
  393.          if (!this.IsMaskChar(this.m_strMask.charAt(var3))) {
  394.             ++var2;
  395.          }
  396.       }
  397.  
  398.       var1 -= var2;
  399.       return var1;
  400.    }
  401.  
  402.    private int DataPosToMaskPos(int var1) {
  403.       for(int var2 = 0; var2 <= var1 && var2 < this.m_strMask.length(); ++var2) {
  404.          if (!this.IsMaskChar(this.m_strMask.charAt(var2))) {
  405.             ++var1;
  406.          }
  407.       }
  408.  
  409.       return var1;
  410.    }
  411.  
  412.    public boolean ProcessKeyPress(int var1, Event var2) {
  413.       if (this.m_keyNext.CheckKeyPress(var1, var2)) {
  414.          this.FindNext();
  415.       } else if (this.m_keyPrevious.CheckKeyPress(var1, var2)) {
  416.          this.FindPrev();
  417.       } else {
  418.          switch (var1) {
  419.             case 8:
  420.             case 127:
  421.                if ((this.m_nFlags & 64) == 0 && this.GetOutputString().length() > 0) {
  422.                   int var3;
  423.                   int var4;
  424.                   if (this.m_strMask.length() > 0) {
  425.                      var3 = this.MaskPosToDataPos(this.m_nCurrPos);
  426.                      var4 = this.MaskPosToDataPos(this.m_nSelStart);
  427.                   } else {
  428.                      var3 = this.m_nCurrPos;
  429.                      var4 = this.m_nSelStart;
  430.                   }
  431.  
  432.                   if (var4 == var3) {
  433.                      if (var1 == 127) {
  434.                         this.m_strData = this.m_strData.substring(0, var3) + this.m_strData.substring(var3 + 1);
  435.                      } else {
  436.                         this.m_strData = this.m_strData.substring(0, var3 - 1) + this.m_strData.substring(var3);
  437.                         --var3;
  438.                      }
  439.                   } else {
  440.                      this.m_strData = this.m_strData.substring(0, Math.min(var3, var4)) + this.m_strData.substring(Math.max(var3, var4));
  441.                      var3 = Math.min(var3, var4);
  442.                   }
  443.  
  444.                   if (this.m_strMask.length() > 0) {
  445.                      this.m_nSelStart = this.m_nCurrPos = this.DataPosToMaskPos(var3);
  446.                   } else {
  447.                      this.m_nSelStart = this.m_nCurrPos = var3;
  448.                   }
  449.  
  450.                   this.PlaceCursor(this.m_nCurrPos);
  451.                   this.DrawControl();
  452.                }
  453.             case 9:
  454.             case 10:
  455.             case 27:
  456.             case 999:
  457.             case 1002:
  458.             case 1003:
  459.             case 1008:
  460.             case 1009:
  461.             case 1010:
  462.             case 1011:
  463.             case 1012:
  464.             case 1013:
  465.             case 1014:
  466.             case 1015:
  467.             case 1016:
  468.             case 1017:
  469.             case 1018:
  470.             case 1019:
  471.                break;
  472.             case 1000:
  473.                this.m_nCurrPos = 0;
  474.                if (this.m_strMask.length() > 0) {
  475.                   this.m_nCurrPos = this.DataPosToMaskPos(this.m_nCurrPos);
  476.                }
  477.  
  478.                if (!var2.shiftDown()) {
  479.                   this.m_nSelStart = this.m_nCurrPos;
  480.                }
  481.  
  482.                this.PlaceCursor(this.m_nCurrPos);
  483.                this.DrawControl();
  484.                break;
  485.             case 1001:
  486.                this.m_nCurrPos = this.GetOutputString().length();
  487.                if (this.m_strMask.length() > 0) {
  488.                   while(this.m_nCurrPos > 0 && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos - 1))) {
  489.                      this.m_nCurrPos += -1;
  490.                   }
  491.                }
  492.  
  493.                if (!var2.shiftDown()) {
  494.                   this.m_nSelStart = this.m_nCurrPos;
  495.                }
  496.  
  497.                this.PlaceCursor(this.m_nCurrPos);
  498.                this.DrawControl();
  499.                break;
  500.             case 1004:
  501.             case 1006:
  502.                if (this.m_strMask.length() == 0 && this.m_nCurrPos > 0 || this.m_strMask.length() > 0 && this.MaskPosToDataPos(this.m_nCurrPos) > 0) {
  503.                   if (var2.controlDown()) {
  504.                      this.m_nCurrPos = this.SearchLeft(this.m_nCurrPos);
  505.                   } else {
  506.                      do {
  507.                         this.m_nCurrPos += -1;
  508.                      } while(this.m_strMask.length() > 0 && this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos)));
  509.                   }
  510.                } else if ((this.m_nFlags & 16384) != 0 && this.m_strMask.length() > 0) {
  511.                   this.FindPrev();
  512.                }
  513.  
  514.                if (!var2.shiftDown()) {
  515.                   this.m_nSelStart = this.m_nCurrPos;
  516.                }
  517.  
  518.                this.PlaceCursor(this.m_nCurrPos);
  519.                this.DrawControl();
  520.                break;
  521.             case 1005:
  522.             case 1007:
  523.                if (this.m_strMask.length() == 0 && this.m_nCurrPos < this.m_strData.length() || this.m_strMask.length() > 0 && this.MaskPosToDataPos(this.m_nCurrPos) < this.m_strData.length()) {
  524.                   if (var2.controlDown()) {
  525.                      this.m_nCurrPos = this.SearchRight(this.m_nCurrPos);
  526.                   } else {
  527.                      do {
  528.                         ++this.m_nCurrPos;
  529.                      } while(this.m_strMask.length() > 0 && this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos)) && this.MaskPosToDataPos(this.m_nCurrPos) < this.m_strData.length());
  530.                   }
  531.                }
  532.  
  533.                if (!var2.shiftDown()) {
  534.                   this.m_nSelStart = this.m_nCurrPos;
  535.                }
  536.  
  537.                this.PlaceCursor(this.m_nCurrPos);
  538.                this.DrawControl();
  539.                break;
  540.             default:
  541.                if ((this.m_nFlags & 64) == 0 && (this.m_nLimit == 0 || this.m_strData.length() < this.m_nLimit || this.m_nSelStart != this.m_nCurrPos)) {
  542.                   if (this.m_strMask.length() <= 0) {
  543.                      this.m_strData = this.m_strData.substring(0, Math.min(this.m_nSelStart, this.m_nCurrPos)) + String.valueOf((char)var1) + this.m_strData.substring(Math.max(this.m_nSelStart, this.m_nCurrPos));
  544.                      this.m_nSelStart = this.m_nCurrPos = Math.min(this.m_nSelStart, this.m_nCurrPos) + 1;
  545.                   } else {
  546.                      while(this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos))) {
  547.                         ++this.m_nCurrPos;
  548.                         this.m_nSelStart = this.m_nCurrPos;
  549.                      }
  550.  
  551.                      if (this.m_nCurrPos != this.m_strMask.length()) {
  552.                         this.m_strData = this.m_strData.substring(0, Math.min(this.MaskPosToDataPos(this.m_nSelStart), this.MaskPosToDataPos(this.m_nCurrPos))) + String.valueOf((char)var1) + this.m_strData.substring(Math.max(this.MaskPosToDataPos(this.m_nSelStart), this.MaskPosToDataPos(this.m_nCurrPos)));
  553.  
  554.                         for(this.m_nCurrPos = Math.min(this.m_nSelStart, this.m_nCurrPos) + 1; this.m_nCurrPos < this.m_strMask.length() && !this.IsMaskChar(this.m_strMask.charAt(this.m_nCurrPos)); ++this.m_nCurrPos) {
  555.                         }
  556.                      }
  557.  
  558.                      if (this.m_nCurrPos == this.m_strMask.length() && (this.m_nFlags & 16384) != 0) {
  559.                         this.FindNext();
  560.                      }
  561.  
  562.                      this.m_nSelStart = this.m_nCurrPos;
  563.                   }
  564.  
  565.                   this.PlaceCursor(this.m_nCurrPos);
  566.                   this.DrawControl();
  567.                }
  568.          }
  569.       }
  570.  
  571.       return true;
  572.    }
  573.  
  574.    public boolean ProcessMouseDown(Point var1) {
  575.       this.m_bSelecting = true;
  576.       this.m_nSelStart = this.m_nCurrPos = this.PlaceCursor(var1);
  577.       if (!this.HasFocus()) {
  578.          this.GetFocus();
  579.       } else {
  580.          this.DrawControl();
  581.       }
  582.  
  583.       return false;
  584.    }
  585.  
  586.    public void SetKeyboardData(CKeyboard var1, CKeyboard var2) {
  587.       this.m_keyPrevious = var1;
  588.       this.m_keyNext = var2;
  589.    }
  590.  
  591.    public boolean SetData(String var1) {
  592.       if (this.m_strData.equals(var1)) {
  593.          return false;
  594.       } else {
  595.          this.m_strData = var1;
  596.          return true;
  597.       }
  598.    }
  599.  
  600.    CEditControl(int var1, CRect var2, boolean var3) {
  601.       this.m_nFlags = var1;
  602.       this.m_nSelStart = 0;
  603.       this.m_nCurrPos = 0;
  604.       this.m_rcSelection = new CRect();
  605.       this.m_rcInsertPt = new CRect();
  606.       this.m_ptText = new Point(0, 0);
  607.       this.m_bHasFocus = var3;
  608.       if (var2 != null) {
  609.          FontMetrics var4 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
  610.          this.m_rcDraw.reshape(var2);
  611.          this.m_rcInsertPt.reshape(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - var4.getHeight()) / 2, 2, var4.getHeight());
  612.          this.m_ptText.move(this.m_rcDraw.x + 5, this.m_rcDraw.y + (this.m_rcDraw.height - (var4.getAscent() + var4.getDescent())) / 2 + var4.getAscent());
  613.       }
  614.  
  615.       if (var3 && (this.m_nFlags & 128) != 0) {
  616.          this.m_nSelStart = 0;
  617.          this.m_nCurrPos = this.GetOutputString().length();
  618.          this.PlaceCursor(this.m_nCurrPos);
  619.       }
  620.  
  621.    }
  622.  
  623.    private void SetSelection() {
  624.       int var1 = 0;
  625.       FontMetrics var2 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_Font);
  626.       String var3 = this.FormatData();
  627.       if (this.m_nSelStart < this.m_nCurrPos) {
  628.          var1 = var2.stringWidth(var3.substring(0, this.m_nCurrPos)) - var2.stringWidth(var3.substring(0, this.m_nSelStart));
  629.          this.m_rcSelection.reshape(this.m_rcInsertPt.x - var1, this.m_rcInsertPt.y, var1, this.m_rcInsertPt.height);
  630.       } else {
  631.          var1 = var2.stringWidth(var3.substring(0, this.m_nSelStart)) - var2.stringWidth(var3.substring(0, this.m_nCurrPos));
  632.          this.m_rcSelection.reshape(this.m_rcInsertPt.x, this.m_rcInsertPt.y, var1, this.m_rcInsertPt.height);
  633.       }
  634.    }
  635. }
  636.